package cn.com.doone.common.uc.web.dao;

import java.util.List;
import java.util.Map;


public interface GroupDao {

	/**
	 * 查询最新的顶级组
	 * @return
	 */
	public Map<String,Object> queryTenantGroup();
	
	/**
	 * 验证组编号
	 * @param params
	 * @return
	 */
	public long validGroupCode(Map<String,Object> params);
	
	/**
	 * 添加用户组
	 * @param userGroup
	 * @return
	 */
	public int addUserGroup(Map<String,Object> paramsMap);
	
	/**
	 * 根据编号获取组信息
	 * @param groupCode
	 * @return
	 */
	public Map<String,Object> queryUserGroupByGroupCode(String groupCode);
	
	/**
	 * 根据组ID查询组信息
	 * @param userGroupId
	 * @return
	 */
	public Map<String,Object> queryUserGroupByGroupId(String userGroupId);
	
	/**
	 * 修改用户组
	 * @param userGroup
	 * @return
	 */
	public int updateUserGroup(Map<String,Object> paramsMap);
	
	/**
	 * 禁用启用组
	 * @param paramsMap
	 * @return
	 * @throws Exception
	 */
	public int editGroupStatus(Map<String,Object> paramsMap);
	
	/**
	 * 删除用户组
	 * @param userGroup
	 * @return
	 * @throws Exception
	 */
	public int deleteUserGroup(Map<String,Object> paramsMap);
	
	/**
	 * 批量删除组
	 * @param paramsMap
	 * @return
	 */
	public int batchDeleteGroupByGroupId(List<Map<String,Object>> groupList);
	
	/**
	 * 根据APP_CODE查询租户
	 * @param clientId
	 * @return
	 */
	public List<Map<String,Object>> queryTenantByAppCode(Map<String,Object> paramsMap);
	
	/**
	 * 查询未更新的组
	 * @param groupCode
	 * @param updateTime
	 * @return
	 */
	public List<Map<String,Object>> queryGroupByTenantAndUpdateTime(Map<String,Object> params);
	
	/**
	 * 根据client_id查询顶级组group_code
	 * @param paramsMap
	 * @return
	 */
	public List<Map<String,Object>> queryGroupCodeByClientId(Map<String,Object> paramsMap);
	
	/**
	 * 根据应用ID查询绑定的组
	 * @param paramsMap
	 * @return
	 */
	public List<Map<String,Object>> queryAuthzGroupByAppInfoId(Map<String,Object> paramsMap);
	
	/**
	 * 根据顶级租户查询组集合
	 * @param groupList
	 * @return
	 */
	public List<Map<String,Object>> queryGroupByAuthzGroup(List<Map<String,Object>> groupList);
	
	/**
	 * 根据租户码查询组信息
	 * @param paramsMap
	 * @return
	 */
	public Map<String,Object> queryGroupByTenantCode(Map<String,Object> paramsMap);
	
	/**
	 * 根据顶级组编号和clientid查询组应用是否有授权
	 * @param paramsMap
	 * @return
	 */
	public long countAuthzByGorupCodeAndClientId(Map<String,Object> paramsMap);
	
	/**
	 * 根据用户ID查询组code
	 * @param paramsMap
	 * @return
	 */
	public List<Map<String,Object>> queryGroupCodeListByUserInfoId(Map<String,Object> paramsMap);
	
	/**
	 * 查询职能组列表
	 * @param paramsMap
	 * @return
	 */
	public List<Map<String,Object>> queryUserGroupList(Map<String,Object> paramsMap);
	
	/**
	 * 统计职能组列表
	 * @param paramsMap
	 * @return
	 */
	public long countUserGroupList(Map<String,Object> paramsMap);
	
	/**
	 * 根据父ID查询组列表
	 * @param paramsMap
	 * @return
	 */
	public List<Map<String,Object>> queryGroupListByFkGroupId(Map<String,Object> paramsMap);
	
	/**
	 * 根据组code查询子组
	 * @param paramsMap
	 * @return
	 */
	public List<Map<String,Object>> queryGroupListByGroupCode(Map<String,Object> paramsMap);
	
	/**
	 * 批量更新groupCode
	 * @param paramsMap
	 * @return
	 */
	public int batchUpdateGroupCodeByUserGroupId(List<Map<String,Object>> list);
}
